<template>
  <div class="echarts-box">
    <div id="myEcharts" :style="{ width: this.width, height: this.height }"></div>
  </div>
</template>

<script>
// 导入 ECharts
import * as echarts from "echarts";
import {onMounted, onUnmounted, reactive} from "vue";

export default {
  name: "BarGraph",
  props: {
    width: {
      type: String,
      required: true
    },
    height: {
      type: String,
      required: true
    },
    tableData: {
      type: Array,
      required: true
    }
  },
  setup(props) {
    // 定义响应式对象用于存储图表数据
    const chartData = reactive({
      xAxisData: [],
      seriesData: []
    });
    let myEcharts = echarts;
    // 挂载时初始化图表
    onMounted(() => {
      console.log(1)
      initChart();
    });
    // 卸载时销毁图表
    onUnmounted(() => {
      // 销毁图表
      myEcharts.dispose;
    });
    function initChart() {
      // 基于准备好的dom，初始化echarts实例
      let chart = myEcharts.init(
          document.getElementById("myEcharts"),
          "purple-passion"
      );
      console.log(props.tableData)
      if (props.tableData) {
        chartData.xAxisData = Array.from(props.tableData).map((item) => item.hanfu_name);
        chartData.seriesData = Array.from(props.tableData).map((item) => item.total_orders);
      }
      chart.setOption({
        // 设置图表的标题
        title: {
          // 设置标题文本
          text: `销售量排行前十汉服`,
          // title 组件离容器左侧的距离
          left: "center"
        },
        // 设置图表的 X 轴
        xAxis: {
          // 数据类型为离散的类目数据
          type: "category",
          // 设置 X 轴数据
          data: chartData.xAxisData,
          axisLabel: {
            rotate: -45
          }
        },
        // 设置提示框组件
        tooltip: {
          // 设置提示框的触发条件
          trigger: "axis"
        },
        // 设置图表的 Y 轴
        yAxis: {
          // 数据类型为连续的数值数据
          type: "value"
        },
        // 设置图表的图例
        series: [
          {
            // 图例中要展示的数据
            data: chartData.seriesData,
            // 设置图表的类型为折线图
            type: "bar",
            // 平滑曲线
            smooth: true,
            // 在顶部显示数据
            itemStyle: {
              normal: {
                label: {
                  show: true,
                  position: "top",
                  formatter: "{c}"
                },
                // 颜色
                color: "pink"
              }
            }
          }
        ]
      });
      // 大小自适应窗口大小变化
      window.onresize = function () {
        // 重置容器高宽
        chart.resize();
      };
    }
    // 更新图表数据
    function updateChartData() {
      const selectedData = props.tableData
      if (selectedData) {
        console.log(selectedData);
        chartData.xAxisData = Array.from(props.tableData).map((item) => item.hanfu_name);
        chartData.seriesData = Array.from(props.tableData).map((item) => item.total_orders);
        // 更新标题
        myEcharts.getInstanceByDom(document.getElementById("myEcharts")).setOption({
          title: {
            text: `销售量排行前十汉服`
          },
          xAxis: {
            data: chartData.xAxisData
          },
          series: [
            {
              data: chartData.seriesData
            }
          ]
        })
      }
    }
    return {
      initChart,
      chartData
    };
  }
};
</script>

<style scoped>

</style>